#include <vector>

namespace reg
{
    static std::vector<int> merge(
        const std::vector<int>& vec1, const std::vector<int> vec2)
    {
        std::vector<int> vec3 = vec1;
        vec3.insert(vec3.end(), vec2.begin(), vec2.end());
        return vec3;
    }

    const std::vector<int> REG_TEMP = {5, 6, 7, 28, 29, 30, 31};
    const std::vector<int> REG_ARG = {10, 11, 12, 13, 14, 15, 16, 17};
    const std::vector<int> REG_CALLEE_SAVED = {
        9, 18, 19, 20, 21, 22, 23, 24 ,25, 26, 27};
    const int REG_ZERO = 0;
    const int REG_RA = 1;
    const int REG_SP = 2;
    const int REG_FP = 8;
    const std::vector<int> REG_TEMP_PRIOR = 
        merge(REG_TEMP, REG_CALLEE_SAVED);
    const std::vector<int> REG_CALLEE_SAVED_PRIOR = 
        merge(REG_CALLEE_SAVED, REG_TEMP);
}